﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SDT.Model;
using SDT.Lib.Common;
using SDT.Lib.Paging;
using SDT.Admin.ViewModels;
using System.Web.Security;
using SDT.Lib.Helpers;
namespace SDT.Admin.Controllers
{
    public class DemandConvertAreaController : Controller
    {
        //
        // GET: /DemandConvertArea/

        ChoVietDataContext eDataContext = new ChoVietDataContext();
        public ActionResult Index(int? page)
        {
            try
            {
                if (!page.HasValue) page = 1;
                string keyword = UserState.getUserStateFromRequest("convertArea.Keyword", "Keyword", "").ToString();
                int pageSize = int.Parse(UserState.getUserStateFromRequest("convertArea.pageSize", "PageSize", 20).ToString());
                int TypeProductID = Convert.ToInt32(UserState.getUserStateFromRequest("convertArea.TypeID", "TypeID", 0));
                var Product_Type = eDataContext.DemandTypes.ToList();
                var Areas = eDataContext.DemandConvertAreas
                   .Where(a => (TypeProductID > 0 ? a.TypeID == TypeProductID : true))
                   .Where(a => (string.IsNullOrEmpty(keyword) ? true :
                                (a.ID.ToString().ToLower().Contains(keyword.ToLower().Trim())) || 
                                
                                (a.Name.ToString().ToLower().Contains(keyword.ToLower().Trim()))
                                )).ToPagedList(page.Value - 1, pageSize);

                return View(new DemandConvertAreaViewModels
                {
                    ListDemandArea = Areas,
                    Keyword = keyword,
                    DemandTypes = Product_Type,
                    CurrentTypeProduct = TypeProductID
                });
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #region Create
        public ActionResult Create()
        {
            var ListType = eDataContext.DemandTypes.ToList();
            return View(new CreateDemandConvertAreate { DemandTypes = ListType });
        }
        [ValidateInput(false)]
        [HttpPost]
        public ActionResult Create(CreateDemandConvertAreate ca)
        {
            try
            {
                UpdateModel(ca);
                var CurrentDemandConvertArea = new DemandConvertArea();
                CurrentDemandConvertArea.AddBy = UserManager.GetUserId();
                CurrentDemandConvertArea.AddDate = DateTime.Now;
                CurrentDemandConvertArea.TypeID = ca.CurrenTypeID;
                if (ca.Min > 0 && ca.Max > 0 && ca.Min > ca.Max)
                {

                    ViewData["MessageInfo"] = "Dữ liệu bị lỗi bạn hãy xem lại dữ liệu đầu vào";
                    return View();
                }
                if (ca.Min < 0 || ca.Max < 0)
                {
                    ViewData["MessageInfo"] = "Dữ liệu bị lỗi bạn hãy xem lại dữ liệu đầu vào";
                    return View();
                }
                CurrentDemandConvertArea.MaxValue = ca.Max;
                CurrentDemandConvertArea.MinValue = ca.Min;
                CurrentDemandConvertArea.Name = ca.NameArea;
                CurrentDemandConvertArea.TypeID =Convert.ToInt32(Request["TypeID"]);
                eDataContext.DemandConvertAreas.InsertOnSubmit(CurrentDemandConvertArea);
                eDataContext.SubmitChanges();
                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                ViewData["MessageInfo"] = "Dữ liệu bị lỗi bạn hãy xem lại dữ liệu đầu vào";
                return View();
            }
        }
        #endregion

        #region Edit
        public ActionResult Edit(int id)
        {
            try
            {
                if (id < 0) throw new NotSupportedException();
                var ConvertDemandsAreaCurrent = eDataContext.DemandConvertAreas.Where(ca => ca.ID == id).SingleOrDefault();
                var ListType = eDataContext.DemandTypes.ToList();
                return View(new CreateDemandConvertAreate
                {
                    DemandConvertArea = ConvertDemandsAreaCurrent,
                    Max = (int)ConvertDemandsAreaCurrent.MaxValue,
                    Min = (int)ConvertDemandsAreaCurrent.MinValue,
                    DemandTypes = ListType,
                    CurrenTypeID = ConvertDemandsAreaCurrent.TypeID,
                    NameArea = ConvertDemandsAreaCurrent.Name
                });
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        [HttpPost]
        public ActionResult Edit(int id, CreateDemandConvertAreate ca)
        {
            try
            {
                if (id < 0) throw new NotSupportedException();
                UpdateModel(ca);
                ca.DemandConvertArea = eDataContext.DemandConvertAreas.Where(c => c.ID == id).SingleOrDefault();
                ca.DemandConvertArea.TypeID = Convert.ToInt32(Request["TypeID"]);
                if (ca.Min > 0 && ca.Max > 0 && ca.Min > ca.Max)
                {

                    ViewData["MessageInfo"] = "Dữ liệu bị lỗi bạn hãy xem lại dữ liệu đầu vào";
                    return View();
                }
                if (ca.Min < 0 || ca.Max < 0)
                {
                    ViewData["MessageInfo"] = "Dữ liệu bị lỗi bạn hãy xem lại dữ liệu đầu vào";
                    return View();
                }
                ca.DemandConvertArea.MinValue = ca.Min;
                ca.DemandConvertArea.MaxValue = ca.Max;
                ca.DemandConvertArea.Name = ca.NameArea;
                eDataContext.SubmitChanges();
                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                ViewData["MessageInfo"] = "Dữ liệu bị lỗi bạn hãy xem lại dữ liệu đầu vào";
                return View();
            }
        }
        #endregion

        #region Delete
        public ActionResult Delete(int id)
        {
            try
            {
                if (id < 0) throw new NotSupportedException();
                var CurrentDemandConvertArea = eDataContext.DemandConvertAreas.Where(ca => ca.ID == id).SingleOrDefault();
                return View(CurrentDemandConvertArea);
            }
            catch (Exception ex)
            {
                ViewData["MessageInfo"] = "Có lỗi xảy ra bạn không thể xóa được";
                return View();
            }
        }
        [HttpPost]
        public ActionResult Delete(int id, FormCollection frm)
        {
            try
            {
                if (id < 0) throw new NotSupportedException();
                var CurrentDemandConvertArea = eDataContext.DemandConvertAreas.Where(ca => ca.ID == id).SingleOrDefault();
                eDataContext.DemandConvertAreas.DeleteOnSubmit(CurrentDemandConvertArea);
                eDataContext.SubmitChanges();
                return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                ViewData["MessageInfo"] = "Có lỗi xảy ra bạn không thể xóa được";
                return View();
            }

        }
        #endregion

        #region Detail
        public ActionResult Detatil(int id)
        {
            try
            {
                if (id < 0) throw new NotSupportedException();
                var ConvertDemandAreaCurrent = eDataContext.DemandConvertAreas.Where(ca => ca.ID == id).SingleOrDefault();
                var ListType = eDataContext.DemandTypes.ToList();
                return View(new CreateDemandConvertAreate
                {
                    DemandConvertArea = ConvertDemandAreaCurrent,
                    Max = (int)ConvertDemandAreaCurrent.MaxValue,
                    Min = (int)ConvertDemandAreaCurrent.MinValue
                });
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

    }
    public static class ExtentionNameDemandConvertArea
    {
        public static DemandType NameProductType(this DemandConvertArea ca)
        {
            ChoVietDataContext eDataContext = new ChoVietDataContext();
            try
            {
                if (ca.TypeID < 0) throw new NotSupportedException();
                return eDataContext.DemandTypes.Where(p => p.ID == ca.TypeID).FirstOrDefault();
            }
            catch (Exception)
            { throw; }
            finally
            {
                eDataContext.Dispose();
            }
        }
        public static MembershipUser NameUserAddBy(this DemandConvertArea ca)
        {
            try
            {
                if (string.IsNullOrEmpty(ca.AddBy.ToString())) throw new NotSupportedException();
                return UserManager.GetUser(ca.AddBy, true);
            }
            catch (Exception)
            { throw; }

        }
    }
}
